package com.gzsxy.Test;

/**
 * 快速排序
 */
public class Test5 {


    public static void saymsg(int[] src) {
        for (int i = 0; i < src.length; i++) {
            System.out.print(src[i]);
            System.out.print(",");
        }
        System.out.println();
    }

    public static int getMiddle(int[] list, int low, int high) {
        // 数组的第一个作为中轴
        int tmp = list[low];
        while (low < high) {
            while (low < high && list[high] >= tmp) {
                high--;
            }
            // 比中轴小的记录移到低端
            list[low] = list[high];
            saymsg(list);
            while (low < high && list[low] <= tmp) {
                low++;
            }
            // 比中轴大的记录移到高端
            list[high] = list[low];
            saymsg(list);
        }
        // 中轴记录到尾
        list[low] = tmp;
        saymsg(list);
        // 返回中轴的位置
        return low;
    }


    public static void quickSort(int[] list, int low, int high) {
        if (low < high) {
            // 将list数组进行一分为二
            int middle = getMiddle(list, low, high);
            // 对低字表进行递归排序
            quickSort(list, low, middle - 1);
            // 对高字表进行递归排序
            quickSort(list, middle + 1, high);
        }
    }


    public static void main(String[] args) {
        int[] src = {49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35,
                25, 53, 51};
        System.out.println("原始数组排序：");
        saymsg(src);
        if (src.length > 0) {
            quickSort(src, 0, src.length - 1);
        }
    }
}
